package character;


import java.io.UnsupportedEncodingException;
import java.util.Arrays;


public class Demo {
    public static boolean isNumberChar(String s){
        for (int i = 0; i < s.length(); i++) {
            char h = s.charAt(i);
            //判断某个字符是不是数字
            boolean flg = Character.isDigit(h);//自己学习Character类！！
            if(flg == false){
                return false;
            }
//            if(h <'0' || h > '9'){//判断每一位字符是否是数字
//                return false;
//            }
        }
        return true;
    }
    public static void main1(String[] args) {
        //字符和字符串之间的 四个方法
        char[] val = {'a','b','c','d','e'};
        String str = new String(val);//不会放在常量池里面  没有用双引号起来
        System.out.println(str);
        String str1 = new String(val,1,3);//从下标一开始到三
        System.out.println(str1);
        String str2 = "12345";
        char s = str2.charAt(2);//获取到二下标的字符  超出范围会越界、
        System.out.println(s);
        char[] s1 = str2.toCharArray();//把str2指向的字符串对象转换为字符数组
        System.out.println(Arrays.toString(s1));
        System.out.println(isNumberChar(str2));

    }
//数组和字符串的转换
    public static void main2(String[] args) throws UnsupportedEncodingException {
        byte[] bytes = {97,98,99,100};//更适合在网络传输数据存储的场精彩使用对二进制来操作  char各部分适合对文本数据来操作尤其包含中文的时候
        String str = new String(bytes,1,3);//数字转换为字符  如果碰到形如@Deprecated修饰的表示这个方法已经过时了没用了
        //下标几到几
        System.out.println(str);
        System.out.println("===========");
        String str2 = "bit";
        byte[] bytes1 = str2.getBytes("GBK");//转换为数字以某种编码 或者utf-8 变成中文后每种编码出来的就不一样了
        System.out.println(Arrays.toString(bytes1));
    }
//字符串比较
    public static void main3(String[] args) {
        String str1 = "abc";
        String str2 = "Abc";
        System.out.println(str1.compareTo(str2));//比较大小  正数表示前面大
        System.out.println(str1.equals(str2));//真假比较
        System.out.println(str1.equalsIgnoreCase(str2));//忽视大小写

    }
//字符串查找
    public static void main4(String[] args) {
        String str= "abcajsdabca";
        String str1 = "abc";
        System.out.println(str.contains(str1));//括号内是一个接口类型 但String实现了这个接口  所以可以转换
        System.out.println(str.indexOf(str1,4));//在主串当中找到子串第一次出现的位置  后面规定从哪里开始 KMP算法
        System.out.println(str.lastIndexOf(str1,6));//从后往前找
        System.out.println(str.startsWith("ab", 7));//是不是一这个字符串开头的
        str.endsWith("ca");//以什么结尾的
    }
//字符串替换
    public static void main5(String[] args) {
        String s = "ababcabcd";
        String s1 = s.replace('a','t');//产生了新的对象 这个只能传字符
        System.out.println(s);
        System.out.println(s1);
        System.out.println(s.replace("ab", "pp"));
        System.out.println(s.replaceAll("ab", "ss"));
        System.out.println(s.replaceFirst("ab", "hh"));//只替换第一个

    }
//字符串拆分
    public static void main6(String[] args) {
        String s = "name=ss&age=16";
        String[] h = s.split("&");//以某个分隔符分割  可进行多次分割
        for (String st:h) {//后面为数组
            //System.out.println(st);
            String[] hh = st.split("=");
            for (String w:hh) {
                System.out.println(w);
            }
        }
        String str = "192.168.1.1";
        String[] strings = str.split("\\.",3);//特殊的字符需要加上转义符才可以 后面加数字表示可分为几组
        for (String ww:strings) {
            System.out.println(ww);
        }
        //如果有多个分隔符可以以|分开
        String str1 = "s h&j%";
        String[] strings1 = str1.split(" |&|%");
        for (String hhh:strings1) {
            System.out.println(hhh);
        }
    }
//字符串截取
    public static void main(String[] args) {
        String str = "abcd";
        String str1 = str.substring(2);//从下标2部分开始提取  如果返回0 那么不会返回新的 对象
        String str2 = str.substring(2,4);//左闭右开
        System.out.println(str2);
        String s = "   ab    c   ";
        String s1 = s.trim();//去除左右两边的空格 但不去除中间的
        System.out.println(s1);
        String h = "cacauhHHSA好";
        System.out.println(h.toUpperCase());//转大写
        System.out.println(h.toLowerCase());//转小写
        String a = "adjas";
        System.out.println(a.concat("bit"));//拼接
        System.out.println(a.length());//有括号 是方法 数组那没有括号 java里面的数字机制很多
        System.out.println(a.isEmpty());//判断为空 有空格也不是空
    }
}
